/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package wasolicitudesfiec;

import com.sun.rave.web.ui.component.Hyperlink;
import entidad.Persona;
import entidad.Usuario;
import hero.interfaces.BnProjectLightValue;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import wasolicitudesfiec.authentication.AuthenticationPhaseListener;
import wasolicitudesfiec.logicacontrol.Logica;
import web.util.Constantes;

/**
 *
 * @author Larry
 */
public class Menu {

    private Logica logica = new Logica();
    private String titulo = "Solicitudes FIEC";

    public JSONObject crearNodo(String nombre, String url, JSONArray menu) throws JSONException {
        JSONObject nodo = new JSONObject();
        nodo.put("nombre", nombre);
        nodo.put("url", url);
        nodo.put("menu", menu);
        return nodo;
    }

    public String getMenu() {
        ArrayList<HashMap<String, String>> listaModelosActividadesPendientes;
        try {
            JSONArray menu = new JSONArray();
            JSONArray solicitudesIniciar = new JSONArray();
            JSONArray actividadesPendientes = new JSONArray();
            JSONObject nodo;
            nodo = crearNodo("Inicio", "/", null);
            menu.put(nodo);
            nodo = crearNodo("Solicitudes a Iniciar", null, solicitudesIniciar);
            menu.put(nodo);
            nodo = crearNodo("Mis Actividades Pendientes", null, actividadesPendientes);
            menu.put(nodo);
            nodo = crearNodo("Solicitudes Activas", "/faces/general/ListaProcesosEnCurso.jsp", null);
            menu.put(nodo);
            nodo = crearNodo("Historial", "/faces/general/ListaHistorial.jsp", null);
            menu.put(nodo);
            nodo = crearNodo("Búsqueda", "/faces/Busquedas/ConsultarSolicitudes.jsp", null);
            menu.put(nodo);

//            Usuario usuario = (Usuario) getSessionMap().get(AuthenticationPhaseListener.USER_SESSION_KEY);
//            logica = new Logica();
//            String nombreRol = Constantes.Rol.Administrador.getNombreEnBD();
//            Persona persona = logica.leerPersonaPorUsuario(usuario.getUsuario());
//            if (logica.isUsuarioMiembrodeRol(persona.getIdPersona(), nombreRol)) {
//                nodo = getMenuAdministracion();//Administracion
//                menu.put(nodo);
//            }


            nodo = getAyuda();//Ayuda
            menu.put(nodo);
            Vector listaProcesosAIniciar = logica.leerProcesosAIniciarDelUsuario();
            listaModelosActividadesPendientes = logica.leerModelosDeActividadesPendientes();

            for (Iterator i$ = listaProcesosAIniciar.iterator(); i$.hasNext();) {
                BnProjectLightValue elem = (BnProjectLightValue) i$.next();
                nodo = crearNodo(elem.getName(), "/controladores/ServletMenu?comando=menu&accion=procesoAIniciar&idModelo=" + elem.getName(), null);
                solicitudesIniciar.put(nodo);
            }
            if (solicitudesIniciar.length() == 0) {
                nodo = crearNodo("No tiene solicitudes a Iniciar", "/controladores/ServletMenu?comando=" + Constantes.NO_EXISTE_SOLICITUDES_A_INICIAR, null);
                solicitudesIniciar.put(nodo);
            }
            /**************************************************************************
             * A continuacion se carga el contenido del Menu "Actividades pendientes"
             */
            for (HashMap<String, String> mapaModelo : listaModelosActividadesPendientes) {
                nodo = crearNodo(mapaModelo.get("nombreModelo"), "/controladores/ServletMenu?comando=menu&accion=actividadesPendientes&idModelo=" + mapaModelo.get("nombreModelo") + "&version=" + mapaModelo.get("version"), null);
                actividadesPendientes.put(nodo);
            }
            if (actividadesPendientes.length() == 0) {
                nodo = crearNodo("No tiene actividades pendientes", "/controladores/ServletMenu?comando=" + Constantes.NO_EXISTEN_ACTIVIDADES_PENDIENTES, null);
                actividadesPendientes.put(nodo);
            }
            return menu.toString();
        } catch (JSONException ex) {
            Logger.getLogger(Menu.class.getName()).log(Level.SEVERE, null, ex);
            return "[{name:'No se puede mostrar Menú'}]";
        }
    }

    private JSONObject getMenuAdministracion() throws JSONException {

        JSONArray administracion = new JSONArray();
        JSONObject nodo;
        JSONObject nodoAdministracion = crearNodo("Administración", "url no definido", administracion);
        /*Menú para la administración de personas*/
        nodo = crearNodo("Usuarios", "/faces/Administracion/Usuarios/Usuarios.jsp", null);
        administracion.put(nodo);

        nodo = crearNodo("Carreras", "/faces/Administracion/Carreras/Carreras.jsp", null);
        administracion.put(nodo);

        nodo = crearNodo("Materias", "/faces/Administracion/Materias/Materias.jsp", null);
        administracion.put(nodo);

        nodo = crearNodo("Ayudantias Varias", "/faces/Administracion/AyudantiasVarias/AyudantiasVarias.jsp", null);
        administracion.put(nodo);

        nodo = crearNodo("Configuración", "/faces/Administracion/Configuracion/Configuraciones.jsp", null);
        administracion.put(nodo);



        return nodoAdministracion;
    }

    private JSONObject getAyuda() throws JSONException {
        JSONArray menuAyuda = new JSONArray();
        JSONObject nodo;
        JSONObject nodoAyuda = crearNodo("Ayuda", "url no definido", menuAyuda);

        nodo = crearNodo("Guía para apertura postgrado", "/faces/Ayuda/GuiaAperturaPostgrado.jsp", null);
        menuAyuda.put(nodo);

        nodo = crearNodo("Guía para solicitar ayudantes", "/faces/Ayuda/GuiaSolicitarAyudante.jsp", null);
        menuAyuda.put(nodo);

        nodo = crearNodo("Guía para ser un ayudante", "/faces/Ayuda/GuiaSerAyudante.jsp", null);
        menuAyuda.put(nodo);

        nodo = crearNodo("Guía para cambio de carrera", "/faces/Ayuda/GuiaCambioCarrera.jsp", null);
        menuAyuda.put(nodo);

        nodo = crearNodo("Guía para convalidación de materia", "/faces/Ayuda/GuiaConvalidacionMateria.jsp", null);
        menuAyuda.put(nodo);

        nodo = crearNodo("Manual de usuario", "/faces/Ayuda/ManualUsuario.jsp", null);
        menuAyuda.put(nodo);
        return nodoAyuda;
    }

    public String getTituloCompleto() {
        return getTitulo() + " - Solicitudes FIEC";
    }

    public String getTitulo() {
        return titulo;
    }

    public void setTitulo(String titulo) {
        this.titulo = titulo;
    }
}
